##

ALLIANCE_TOP	= /opt/alliance-5.0

ENV_ASIMUT	= MBK_CATAL_NAME=CATAL_ASIMUT

ENV_COUGAR	= MBK_SPI_MODEL=$(ALLIANCE_TOP)/etc/spimodel.cfg ;\
		  export MBK_SPI_MODEL;\
		  MBK_IN_PH=ap ;\
		  export MBK_IN_PH;\
		  MBK_OUT_LO=spi;\
		  export MBK_OUT_LO
	
all: translate check-behavioral synthesis place-route transistors

#------------------------------------------------------------------------------
# Translate to Alliance VHDL

translate: celda_multiplicadora.vbe ffd.vbe pipem.vst multiplicador_encauzado.vst

celda_multiplicadora.vbe: celda_multiplicadora.vhdl
	vasy -Vaop -I vhdl celda_multiplicadora

ffd.vbe: ffd.vhdl
	vasy -Vaop -I vhdl ffd

pipem.vst pipem_model.vbe: pipem.vhdl
	vasy -Vaop -I vhdl -H pipem

multiplicador_encauzado.vst multiplicador_encauzado_model.vbe: multiplicador_encauzado.vhdl
	vasy -Vaop -I vhdl -H multiplicador_encauzado

#------------------------------------------------------------------------------
# Simulate the multiplicador model

check-behavioral:  celda_multiplicadora.vbe ffd.vbe pipem.vst multiplicador_encauzado.vst \
			test_mul.pat result_sim.pat

test_mul.pat: test_mul.c
	genpat test_mul

result_sim.pat: multiplicador_encauzado.vst test_mul.pat
	$(ENV_ASIMUT) asimut multiplicador_encauzado test_mul result_sim

view-behav: result_sim.pat
	xpat -l result_sim 

#------------------------------------------------------------------------------
# Synthesize the shifter4 bits

synthesis: celda_multiplicadora.vst ffd.vst pipem_model.vst multiplicador_encauzado_model.vst

celda_multiplicadora.vst: celda_multiplicadora_boom.vbe
	boog -m 0 celda_multiplicadora_boom celda_multiplicadora
	loon -m 0 -o celda_multiplicadora

celda_multiplicadora_boom.vbe: celda_multiplicadora.vbe
	boom -i 10 -d 0 celda_multiplicadora celda_multiplicadora_boom

ffd.vst: ffd_boom.vbe
	boog -m 0 ffd_boom ffd
	loon -m 0 -o ffd

pipem_model.vst: pipem_model_boom.vbe
	boog -m 0 pipem_model_boom pipem_model
	loon -m 0 -o pipem_model

pipem_model_boom.vbe: pipem_model.vbe
	boom -i 10 -d 0 pipem_model pipem_model_boom

multiplicador_encauzado_model.vst: multiplicador_encauzado_model_boom.vbe
	boog -m 0 multiplicador_encauzado_model_boom multiplicador_encauzado_model
	loon -m 0 -o multiplicador_encauzado_model

ffd_boom.vbe: ffd.vbe
	boom -i 10 -d 0 ffd ffd_boom

multiplicador_encauzado_model_boom.vbe: multiplicador_encauzado_model.vbe
	boom -i 10 -d 0 multiplicador_encauzado_model multiplicador_encauzado_model_boom 

view-gates: celda_multiplicadora.vst multiplicador2bits_model.vst ffd.vst pipem.vst pipem_model.vst multiplicador_encauzado.vst multiplicador_encauzado_model.vst
	xsch -l multiplicador_encauzado

#------------------------------------------------------------------------------
# Place and Route multiplicador

place-route: synthesis multiplicador_encauzado_ocp.ap multiplicador_encauzado_nero.ap \
		multiplicador_encauzado_s2r.cif

multiplicador_encauzado_ocp.ap: multiplicador_encauzado.vst
	ocp multiplicador_encauzado multiplicador_encauzado_ocp

multiplicador_encauzado_nero.ap: multiplicador_encauzado_ocp.ap multiplicador_encauzado.vst
	nero -p multiplicador_encauzado_ocp multiplicador_encauzado multiplicador_encauzado_nero

celda_multiplicadora_ocp.ap: celda_multiplicadora.vst
	ocp celda_multiplicadora celda_multiplicadora_ocp

celda_multiplicadora_nero.ap: celda_multiplicadora_ocp.ap celda_multiplicadora.vst
	nero -p celda_multiplicadora_ocp celda_multiplicadora celda_multiplicadora_nero

multiplicador_encauzado_s2r.cif: multiplicador_encauzado_nero.ap
	s2r multiplicador_encauzado_nero multiplicador_encauzado_s2r

view-place: synthesis multiplicador_encauzado_ocp.ap
	graal -l multiplicador_encauzado_ocp

view-route: synthesis multiplicador_encauzado_nero.ap
	graal -l multiplicador_encauzado_nero

view-real: synthesis multiplicador_encauzado_s2r.cif
	dreal -l multiplicador_encauzado_s2r

#------------------------------------------------------------------------------
# Extract transistor netlist

transistors: place-route multiplicador_encauzado_transistors.spi celda_multiplicadora_transistors.spi

multiplicador_encauzado_transistors.spi: multiplicador_encauzado_nero.ap
	$(ENV_COUGAR); cougar -t multiplicador_encauzado_nero multiplicador_encauzado_transistors

celda_multiplicadora_transistors.spi: celda_multiplicadora_nero.ap
	$(ENV_COUGAR); cougar -t celda_multiplicadora_nero celda_multiplicadora_transistors

spice-multiplicador: multiplicador_encauzado_transistors.spi
	$(ENV_COUGAR); xsch -I spi -l multiplicador_encauzado_transistors

spice-celda: celda_multiplicadora_transistors.spi
	$(ENV_COUGAR); xsch -I spi -l celda_multiplicadora_transistors

clean:
	rm -rf  *.pat \
		*.vst \
		*.xsc \
		*.vbe \
		*.boom \
		*.ap \
		*.cif \
		*.spi \
		*.dat
